package com.hzw.saas.common.pay.alipay.bean;

import com.alibaba.fastjson.JSON;
import com.alipay.api.internal.util.StringUtils;
import lombok.Getter;

/**
 * alipay.trade.fastpay.refund.query(统一收单交易退款查询) biz_content 参数
 * https://opendocs.alipay.com/apis/api_1/alipay.trade.fastpay.refund.query
 *
 * @author zzl
 * @since 2020-09-25
 */
@Getter
public class AliRefundQueryReqContent extends AliTradeReqContent {

    /**
     * 原支付请求的商户订单号
     * 和支付宝交易号不能同时为空
     * 默认传入
     */
    private String out_trade_no;

    /**
     * 支付宝交易号
     * 和商户订单号不能同时为空
     * 如果同时传了 out_trade_no和 trade_no，则以 trade_no为准
     */
    private String trade_no;

    /**
     * 请求退款接口时，传入的退款请求号，如果在退款请求时未传入，则该值为创建交易时的外部交易号
     * 一般同商户订单号，或支付宝交易号
     * 必选
     */
    private String out_request_no;

    public static AliRefundQueryReqContent build() {
        return new AliRefundQueryReqContent();
    }

    public AliRefundQueryReqContent out_trade_no(String outTradeNo) {
        this.out_trade_no = outTradeNo;
        return this;
    }

    public AliRefundQueryReqContent trade_no(String tradeNo) {
        this.trade_no = tradeNo;
        return this;
    }

    public AliRefundQueryReqContent out_request_no(String outRequestNo) {
        this.out_request_no = outRequestNo;
        return this;
    }

    @Override
    public String buildBizContent() {
        if (StringUtils.isEmpty(this.out_trade_no)) {
            throw new IllegalArgumentException("out_trade_no商户订单号不能为空！");
        }

        if (StringUtils.isEmpty(this.out_request_no)) {
            if (!StringUtils.isEmpty(this.out_trade_no)) {
                this.out_request_no = this.out_trade_no;
            } else if (!StringUtils.isEmpty(this.trade_no)) {
                this.out_request_no = this.trade_no;
            }
        }

        return JSON.toJSONString(this);
    }
}
